package com.doctcloud.hisinfo.common.utils;

import java.nio.charset.Charset;

public class CharsetConversionUtils {

    // 数据库的原始字符集
    private static final Charset ORACLE_CHARSET = Charset.forName("GBK");
    // 目标字符集（Java内存中使用UTF-16，但我们需要的是UTF-8字符串）
    private static final Charset TARGET_CHARSET = Charset.forName("UTF-8");

    /**
     * 修正因错误解码导致的乱码字符串。
     * 原理：将乱码字符串按错误的编码（UTF-8）转回字节，再用正确的编码（GBK）重新解码。
     * @param garbledString 从数据库读出的乱码字符串
     * @return 正确的字符串
     */
    public static String fixGarbledString(String garbledString) {
        if (garbledString == null) {
            return null;
        }
        try {
            // 这是最关键的一步，它模拟了“反向操作”来纠正乱码
            byte[] bytes = garbledString.getBytes(TARGET_CHARSET);
            return new String(bytes, ORACLE_CHARSET);
        } catch (Exception e) {
            // 如果转换失败，返回原始字符串，避免程序崩溃
            return garbledString;
        }
    }
}